IF ELSE |
The sentence IF executes a portion of code when a condition is met. If the condition is true, then the commands will be executed. The sentence IF may be used together with the sentence ELSE. The IF ELSE statement selects between two paths of execution. La sentencia IF ejecuta una porción de código cuando una condición se cumple. Si la condición es verdadera, entonces el bloque se ejecutará. La sentencia IF se puede usar junto con la sentencia ELSE. La sentencia IF ELSE selecciona entre dos rutas de ejecución. |
Problem 1 |
city_bank > Create and test the stored procedure shown using Oracle. Cree y pruebe el procedimiento almacenado que se muestra en Oracle. |
MSDOS: cmd.exe |
SQL> CREATE OR REPLACE PROCEDURE p_big 2 ( 3 input INTEGER 4 ) 5 IS 6 BEGIN 7 IF (input>5) THEN 8 dbms_output.put_line(input || ' is bigger than 5'); 9 ELSE 10 dbms_output.put_line(input || ' is not bigger than 5'); 11 END IF; 12 END p_big; 13 / Procedure created. SQL> SET SERVEROUTPUT ON; SQL> EXECUTE p_big(10); 10 is bigger than 5 PL/SQL procedure successfully completed. SQL> EXECUTE p_big(4); 4 is not bigger than 5 PL/SQL procedure successfully completed. |
Tip |
The block diagram below represents the previous stored procedure. Most programmers are familiar with block diagrams. El diagrama de bloques de abajo representa el procedimiento almacenado previo. La mayoría de los programadores conocen los diagramas de bloques. |
Problem 2 |
city_bank > (a) Find manually the output of the stored procedure, (b) Create and test the stored procedure shown using Oracle. (a) Encuentre manualmente la salida del procedimiento almacenado. (b) Cree y pruebe el procedimiento almacenado que se muestra en Oracle. |
MSDOS: cmd.exe |
SQL> CREATE OR REPLACE PROCEDURE p_comp 2 IS 3 p_a NUMBER(5, 2) := 22; 4 p_b NUMBER(5, 2) := 15; 5 BEGIN 6 IF (p_a < p_b) THEN 7 p_a := 72; 8 ELSE 9 p_a := p_b/3; 10 p_b := p_a/2; 11 END IF; 12 dbms_output.put_line(p_a || ', ' || p_b); 13 END p_comp; 14 / Procedure created. SQL> EXECUTE p_comp; 5, 2.5 PL/SQL procedure successfully completed. |
Problem 3 |
city_bank > (a) Find manually the output of the stored procedure, (b) Create and test the stored procedure shown using Oracle. (a) Encuentre manualmente la salida del procedimiento almacenado. (b) Cree y pruebe el procedimiento almacenado que se muestra en Oracle. |
MSDOS: cmd.exe |
SQL> CREATE OR REPLACE PROCEDURE p_alpha 2 IS 3 p_a NUMBER(5, 2):=2; 4 p_b NUMBER(5, 2):=10; 5 p_c NUMBER(5, 2):=12; 6 BEGIN 7 IF (p_a>p_b) THEN 8 p_a := p_a * p_b; 9 ELSE 10 IF (p_a < p_c) THEN 11 p_a := p_b/3; 12 END IF; 13 p_b := p_a/2; 14 END IF; 15 dbms_output.put_line(p_a || ', ' || p_b || ', ' || p_c); 16 END p_alpha; 17 / Procedure created. SQL> EXECUTE p_alpha; 3.33, 1.67, 12 PL/SQL procedure successfully completed. |
Problem 4 |
city_bank > (a) Find manually the output of the stored procedure, (b) Create and test the stored procedure shown using Oracle. (a) Encuentre manualmente la salida del procedimiento almacenado. (b) Cree y pruebe el procedimiento almacenado que se muestra en Oracle. |
MSDOS: cmd.exe |
SQL> CREATE OR REPLACE PROCEDURE p_beta 2 IS 3 p_a NUMBER(5, 2):=2; 4 p_b NUMBER(5, 2):=10; 5 p_c NUMBER(5, 2):=12; 6 BEGIN 7 IF (p_a > p_b) THEN 8 p_a := p_a * p_b; 9 ELSE 10 IF (NOT p_a < p_c) THEN -- IF (p_a >= p_c) THEN 11 p_a := p_b/3; 12 END IF; 13 p_b := p_a/2; 14 END IF; 15 dbms_output.put_line(p_a || ', ' || p_b || ', ' || p_c); 16 END p_beta; 17 / Procedure created. |
Problem 5 |
city_bank > (a) Create and test the stored procedure shown using Oracle. Manually find: (b) p_gamma(11), (c) p_gamma(10), (d) p_gamma(5), (e) p_gamma(1). (a) Cree y pruebe el procedimiento almacenado que se muestra en Oracle. Encuentre manualmente: (b) p_gamma(11), (c) p_gamma(10), (d) p_gamma(5), (e) p_gamma(1). |
MSDOS: cmd.exe |
SQL> CREATE OR REPLACE PROCEDURE p_gamma 2 ( 3 input NUMBER 4 ) 5 IS 6 BEGIN 7 IF (input > 10) THEN 8 dbms_output.put_line(input || ' is bigger than 10'); 9 ELSIF (input < 2) THEN 10 dbms_output.put_line(input || ' is smaller than 2'); 11 ELSIF (input = 5) THEN 12 dbms_output.put_line(input || ' is equal to 5'); 13 ELSE 14 dbms_output.put_line('Hola'); 15 END IF; 16 dbms_output.put_line('Hello'); 17 END p_gamma; 18 / Procedure created. SQL> EXECUTE p_gamma(11); 11 is bigger than 10 Hello PL/SQL procedure successfully completed. |
Tip |
Microsoft SQL Server supports the IF ELSE commands, however, it is not necessary to use the keyword THEN. If more than one instruction is inside an IF or ELSE block, it is necessary to use the keywords BEGIN and END, to define the beginning and end of block. Microsoft SQL Server soporta el comando IF y ELSE, sin embargo no es necesario usar THEN. Si se requiere incluir más de una línea dentro del IF o del ELSE es necesario usar BEGIN y END para definir el inicio y el fin de bloque. |
Problem 6 |
city_bank > Create a function called impuesto that returns the 17 % of the balance when the balance is positive, and it returns zero otherwise. Using: (a) Oracle. (b) Microsoft SQL Server. Cree una función llamada impuesto que regrese el 17 % del balance cuando el balance es positivo, y regrese cero de otra forma. Usando: (a) Oracle. (b) Microsoft SQL Server. |
MSDOS: cmd.exe |
SQL> SELECT account_id, 2 balance, 3 impuesto(balance) as tax 4 FROM account; ACCOUNT_ID BALANCE TAX ---------- ---------- ---------- 120768 234.56 39.88 348973 12756.56 2168.62 678453 -456.78 0 745363 1223.67 208.02 987654 89.65 15.24 348974 -1756.56 0 678454 2456.78 417.65 745368 323.97 55.07 987692 2789.65 474.24 9 rows selected. |
Microsoft SQL Server |
SELECT account_id, balance, dbo.impuesto(balance) AS tas FROM account; |
Problem 7 |
city_bank > Create a procedure called p_tax. The procedure will take the Gross Income as parameter. If the Gross Income is less than 10,000.00 dollars, the program should display 15% of the Gross Income. Otherwise, the program will display 20% of the Gross Income. Using: (a) Oracle. (b) Microsoft SQL Server. Cree un procedimiento llamado p_tax. El procedimiento toma los ingresos netos como entrada. Si los ingresos netos son menores a 10,000.00 dolares, el procedimiento mostrará el 15% de los ingresos netos. De otra forma el procedimiento mostrará el 20% de los ingresos netos. Usando: (a) Oracle. (b) Microsoft SQL Server. |
MSDOS: cmd.exe |
SQL> SET SERVEROUTPUT ON; SQL> EXECUTE p_tax(5250); For an income of $5,250.00 your taxes are $787.50 PL/SQL procedure successfully completed. SQL> EXECUTE p_tax(22543); For an income of $22,543.00 your taxes are $4,508.60 PL/SQL procedure successfully completed. |
Microsoft SQL Server |
USE city_bank; EXECUTE p_tax 5250; |
Output |
For an income of $5250.0000 your taxes are $787.50 |
Microsoft SQL Server |
USE city_bank; EXECUTE p_tax 22543; |
Output |
For an income of $22543.0000 your taxes are $4508.60 |
Problem 8 |
city_bank > Create a function called tax. The function must take the balance of an account as input. If the balance is bigger than 1,000.00 dollars, the function returns 25 % of the balance. If the balance is 1,000.00 dollars or less but positive, then the function returns 12 % of the balance. The function returns 10.00 dollars when the balance is negative. Using: (a) Oracle. (b) Microsoft SQL Server. Cree una función llamada tax. La función toma el balance de la cuenta como entrada. Si el balance es mayor de 1,000.00 dólares, la función regresa 25% del balance. Si el balance es 1,000.00 dólares o menos pero positivo la función regresa el 12% del balance de la cuenta. La función regresa 10.00 dólares cuando el balance es negativo. Usando: (a) Oracle. (b) Microsoft SQL Server. |
MSDOS: cmd.exe |
SQL> SELECT account_id, 2 balance, 3 tax(balance) AS tax 4 FROM account; ACCOUNT_ID BALANCE TAX ---------- ---------- ---------- 120768 234.56 28.15 348973 12756.56 3189.14 678453 -456.78 10 745363 1223.67 305.92 987654 89.65 10.76 348974 -1756.56 10 678454 2456.78 614.2 745368 323.97 38.88 987692 2789.65 697.41 9 rows selected. |
Microsoft SQL Server |
SELECT account_id, balance, dbo.tax(balance) AS tax FROM account; |
Problem 9 |
kimberly > Create a function called shipping_cost. Suppose that the dimensions of the items are in centimeters, the density in grams/cm3, and the cost of the material in dollars. The function takes the item_id as input. If the volume is less than 15 cm3, the cost is 3.57 dollars per cm3. Otherwise, the weight is used to compute the cost, which is 0.22 dollars per gram. Additionally, if any of the dimensions is bigger than 10 cm, there is an extra charge of 5.39 dollars. The function must return the shipping cost of the package. Using: (a) Oracle. (b) Microsoft SQL Server. Cree una función llamada shipping_cost. Suponga que las dimensiones de los objetos están en centímetros, la densidad en gramos por centímetro cúbico, y el costo del material en dólares. La función toma el item_id como entrada. Si el volumen del objeto es menor o igual a 15 cm3, el costo es de 3.57 dólares por centímetro cúbico. De otro modo se usa el peso para calcular el costo, el cual es de 0.22 dólares por gramo. Adicionalmente, si cualquiera de las dimensiones del artículo es mayor de 10 cm se aplica un cargo extra de 5.39 dolares. La función regresa el costo de envío del paquete. Usando: (a) Oracle. (b) Microsoft SQL Server. |
MSDOS: cmd.exe |
SQL> SELECT name, 2 shipping_cost(item_id) AS shipping 3 FROM item; NAME SHIPPING ---------- ---------- Book 11 TV 28 Chair 22 Bed 12 Table 30 Computer 32 CD 54 Printer 18 Picture 48 Speaker 50 10 rows selected. |
Microsoft SQL Server |
SELECT name, dbo.shipping_cost(item_id) AS cost FROM item; |